package cn.cool;

import cn.cool.common.CdDropdownItem;
import cn.cool.common.CdResult;
import cn.cool.config.CdConfigSetting;
import cn.cool.logic.CdLogicImpl;

import java.util.List;

public class CdService {

    private CdService(){}

    private static final CdLogicImpl cdLogicImpl = new CdLogicImpl();

    /**
     * 初始化数据
     */
    public static void initSettingData() {
        cdLogicImpl.initSettingData();
    }

    /**
     * 初始化指定文件的数据
     *
     * @param configSet 配置信息
     */
    public static void initSettingData(CdConfigSetting configSet) {
        cdLogicImpl.initSettingData(configSet);
    }

    /**
     * 获取所有数据
     *
     * @return 返回结果
     */
    public static CdResult getAllData() {
        return cdLogicImpl.getAllData();
    }

    /**
     * 获取所有命名空间数据
     *
     * @return 返回结果
     */
    public static CdResult getAllNameSpaceData() {
        return cdLogicImpl.getAllNameSpaceData();
    }

    /**
     * 获取所有类型数据
     *
     * @param nameSpace 命名空间
     * @return 返回结果
     */
    public static CdResult getAllTypeData(String nameSpace) {
        return cdLogicImpl.getAllTypeData(nameSpace);
    }

    /**
     * 获取命名空间类型下所有值数据
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @return 返回结果
     */
    public static CdResult getAllTypeKeyData(String nameSpace, String type) {
        return cdLogicImpl.getAllTypeKeyData(nameSpace, type);
    }

    /**
     * 获取命名空间类型下具体key键的数据值
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @param key 键
     * @return 返回结果
     */
    public static CdResult getKeyValueData(String nameSpace, String type, String key) {
        return cdLogicImpl.getKeyValueData(nameSpace, type, key);
    }

    /**
     * 获取命名空间类型的下拉项数据 (获取命名空间类型下具体key键的数据值)
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @return 返回结果
     */
    public static List<CdDropdownItem> getDropDownListData(String nameSpace, String type) {
        return cdLogicImpl.getDropDownListData(nameSpace, type);
    }

    /**
     * 获取命名空间类型包含首项的下拉项数据 (获取命名空间类型下具体key键的数据值)
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @return 返回结果
     */
    public static List<CdDropdownItem> getDropDownListTopEmptyData(String nameSpace, String type) {
        return cdLogicImpl.getDropDownListTopEmptyData(nameSpace, type);
    }

    /**
     * 获取命名空间数据个数
     *
     * @return 返回结果
     */
    public static int getNameSpaceCount() {
        return cdLogicImpl.getNameSpaceCount();
    }

    /**
     * 获取命名空间下类型个数
     *
     * @param nameSpace 命名空间
     * @return 返回结果
     */
    public static int getTypeCount(String nameSpace) {
        return cdLogicImpl.getTypeCount(nameSpace);
    }

    /**
     * 获取命名空间下类型的key个数
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @return 返回结果
     */
    public static int getTypeKeyCount(String nameSpace, String type) {
        return cdLogicImpl.getTypeKeyCount(nameSpace, type);
    }

}
